package com.learn.lombok.builder;

import lombok.AccessLevel;
import lombok.Builder;
import lombok.ToString;

@Builder(
        // 生成类、方法访问修饰符
        access = AccessLevel.PUBLIC
        // 生成构建器的类名
        , builderClassName = "BuilderEntityBuilder"
        // 创建构建器静态方法名
        , builderMethodName = "builder"
        // 构建实例方法名
        , buildMethodName = "build"
        // setter 方法前缀
        , setterPrefix = "set"
        // 是否生成实例方法 创建构建器
        , toBuilder = true
)
@ToString
public class BuilderEntity {
    private String id;
    private String name;
    // 当字段未设置值时，默认值
    @Builder.Default
    private String age = "2";
    // 与 【toBuilder=true】 配合使用，当调用实例 toBuilder() 方法时，会调用 指定的 method 或 field 方法来替换值
    @Builder.ObtainVia(
            // 使用指定 字段的值 替换
            // field = "replaceSex"
            // 使用指定 方法的返回值 替换
            method = "updateReplaceSexStatic"
            // 该方法是否为静态方法
            , isStatic = true
    )
    private String sex;
    @Builder.ObtainVia(
            method = "updateReplaceSex"
    )
    private String sex2;
    private String replaceSex;

    public static String updateReplaceSexStatic(BuilderEntity val) {
        return val.replaceSex;
    }

    public String updateReplaceSex() {
        return this.replaceSex;
    }
}
